package comandos;

import model.Usuario;
import protocol.MensajeComando;
import server.ClienteHilo;
import server.dao.UsuarioDAO;

public class CrearUsuario implements ComandoServidor
{
	public void ejecutar (ClienteHilo cliente)
	{

			try
			{
				//Creo el usuario en la base de datos, si la operacion es exitosa
				//A modo de ejemplo retorno un MensajeComando al cliente como si la operacion hubiese sido exitosa
				//Se que obtengo un objeto usuario de parte del cliente luego de llamar al comando, por lo tanto recibo el usuario

				Usuario user = (Usuario) cliente.getInput().readObject();
				String nick = user.getNick();
				System.out.println("Registro - Intentando crear el usuario <" + user.getNick() + ">");
				if (!existeUsuarioEnBBDD(user))
				{
					user = crearUsuarioEnBBDD(user);
					
					if (user != null)
					{
						System.out.println("Registro - Usuario <" + nick + "> creado con exito");
						cliente.getOutput().writeObject(new MensajeComando("El usuario fue creado con exito",1));
						cliente.getOutput().flush();
						cliente.getOutput().writeObject(user);
						cliente.getOutput().flush();
					}
					else
					{
						System.out.println("Registro - Problema al crear el usuario <" + nick + ">");
						cliente.getOutput().writeObject(new MensajeComando("Problema al crear usuario",0));
						cliente.getOutput().flush();
					}
					
				}
				else
				{
					System.out.println("Registro - El usuario <" + nick + "> ya existe");
					cliente.getOutput().writeObject(new MensajeComando("El usuario ya existe",0));
					cliente.getOutput().flush();
				}
				
				
			}
			catch (Exception e)
			{
				e.printStackTrace();
				System.out.println("Problema al ejecutar el comando");
			}
			

	}

	private Usuario crearUsuarioEnBBDD(Usuario user){
		
		try
		{
			UsuarioDAO usuario = new UsuarioDAO();
			usuario.guardar(user);
			int insertId = usuario.getUltimoId();
			Usuario usuarioCompleto = usuario.obtener(insertId);
			return usuarioCompleto;
			
		}
		catch(Exception e)
		{
			System.out.println("No pudo ejecutarse la consulta correctamente");
			return null;
		}
	
	}
	
	
	private boolean existeUsuarioEnBBDD(Usuario user){
			
			try
			{
				UsuarioDAO usuario = new UsuarioDAO();
				Usuario encontrados = usuario.obtener(user.getNick(),user.getPassword());
				return encontrados != null;
				
			}
			catch(Exception e)
			{
				System.out.println("No pudo ejecutarse la consulta correctamente");
				return false;
			}
		
		}
	
}
